#!/usr/bin/env python3
"""
删除数据库中的指定查询记录
"""
import sys
import os

# 添加项目路径以便导入模块
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from learning.DBhelper import DBhelper


def delete_query_from_db(db_path, query):
    """
    从数据库中删除指定的查询记录
    
    Args:
        db_path: 数据库文件路径
        query: 要删除的查询（可以是元组、列表或字符串）
    """
    # 检查数据库文件是否存在
    if not os.path.exists(db_path):
        print(f"错误: 数据库文件不存在: {db_path}")
        return False
    
    # 创建 DBhelper 实例
    db_helper = DBhelper(db_path)
    
    # 将查询转换为字符串（与存储时的格式一致）
    if isinstance(query, (tuple, list)):
        query_str = str(query)
    else:
        query_str = str(query)
    
    print(f"数据库路径: {db_path}")
    print(f"要删除的查询: {query_str}")
    print("-" * 80)
    
    # 先检查记录是否存在
    existing_result = db_helper.execute_query(query_str)
    if existing_result is None:
        print("⚠️  记录不存在，无需删除")
        db_helper.disconnect()
        return False
    
    print(f"找到记录:")
    print(f"  查询: {query_str}")
    print(f"  结果: {existing_result}")
    print("-" * 80)
    
    # 删除记录
    try:
        db_helper.delete_query(query_str)
        print("✓ 记录已成功删除")
        db_helper.disconnect()
        return True
    except Exception as e:
        print(f"✗ 删除记录时出错: {e}")
        import traceback
        traceback.print_exc()
        db_helper.disconnect()
        return False


def main():
    import argparse
    
    parser = argparse.ArgumentParser(
        description='从数据库中删除指定的查询记录',
        formatter_class=argparse.RawDescriptionHelpFormatter
    )
    
    parser.add_argument(
        '--db',
        type=str,
        default='/tmp/db/tlse_tls12_oneway_debug.db',
        help='数据库文件路径（默认: /tmp/db/tlse_tls12_oneway_debug.db）'
    )
    
    parser.add_argument(
        '--query',
        type=str,
        default=None,
        help='要删除的查询（字符串格式，默认: 删除目标查询序列）'
    )
    
    args = parser.parse_args()
    
    # 要删除的查询
    if args.query:
        # 尝试解析为 Python 对象
        import ast
        try:
            target_query = ast.literal_eval(args.query)
        except:
            target_query = args.query
    else:
        target_query = ('ClientHello', 'ClientKeyExchange', 'ChangeCipherSpec', 'ClosureAlert', 'Finish')
    
    print("=" * 80)
    print("删除数据库查询记录")
    print("=" * 80)
    
    success = delete_query_from_db(args.db, target_query)
    
    print("=" * 80)
    if success:
        print("操作完成")
    else:
        print("操作失败或记录不存在")
    print("=" * 80)


if __name__ == '__main__':
    main()

